# # 读取 csv/txt 文件
# with open("test_file.csv", "r") as file:
#     for line in file:
#         print(line)


# import xlrd #不知道为啥xlrd无法读取xlsx。换个方法
#
# # 打开文件
# file = xlrd.open_workbook("test_file.xlsx")
# # 按索引读取表
# table = file.sheet_by_index(0)
# # 读取每行并打印
# for i in range(table.nrows):
#     print(table.row_values(i))

# #！上个函数错误的原因是使用了 xlrd 来读取 xlsx 格式的 Excel 文件，而 xlrd 只支持 xls 格式的 Excel 文件。
# import openpyxl
# # 打开 Excel 文件
# wb = openpyxl.load_workbook("test_file.xlsx")
# # 获取第 1 个表格
# sheet = wb.worksheets[0]
# # 读取每行并打印
# for row in sheet.rows:
#     row_values = []
#     for cell in row:
#         row_values.append(cell.value)
#     print(row_values)

# #读取csv和txt，sep需要根据文本具体情况判断
# import pandas as pd
#
# # df = pd.read_csv("test_file.csv")
# df = pd.read_csv("test_file.txt", header=0, sep='\t')
#
# #除了` csv `文件，Pandas 读取其他文件的方法如下：
# # - pd.read_json # JSON 文件
# # - pd.read_html # HTML 文件
# # - pd.read_clipboard # 本地剪切板
# # - pd.read_excel # MS Excel 文件
# # - pd.read_hdf # HDF5Format 文件
# # - pd.read_feather # Feather 格式
# # - pd.read_msgpack # Msgpack
# # - pd.read_stata # Stata
# # - pd.read_sas # SAS
# # - pd.read_pickle # Python Pickle 格式
# print(df)
#
# # MySQL数据库的读取
# # 安装第三方库pip install mysql-connector-python

import pandas as pd
# df = pd.read_csv("test_file.csv")
# # df.head()  # 浏览头部数据+数字自定义条数
# # print(df.head())
# # df.tail()  # 尾部数据
# # print(df.tail())
# #describe()方法可以对数据集中的数值进行统计，会输出数据计数、最大值、最小值等。count可以计算非空数据数量
# print(df.describe())

# #查找缺失值
# df = pd.read_csv("test_file_nan.csv")
# print(df.isnull())#notnull
# #删除缺失值
# # df.dropna(axis=0) #axis=1慎用，0行1列
# #填充缺失值method：用于填充缺失值的方法方式，包括 pad, ffill, bfill, backfill 等。
# # 其中，pad 和 ffill 表示用前一个非空值来填充，bfill 和 backfill 表示用后一个非空值填充。
# df.fillna(method='pad')
# #fillna方法不能改变原有的数据集，但可以用inplace=True改变，不过慎用
# #第二种方法在 Pandas 中，可以使用 to_csv() 方法将 DataFrame 中的数据导出为 CSV 文件。
# # 该方法可以接受很多不同的参数，以便于对导出文件的生成进行更加细致的控制。

# #插值填充。插值填充就是采用数学的方法对数据进行插值。
# # 通过 interpolate() 方法实现。默认为参数为线性插值，即 method='linear'。
# df.interpolate()
# #interpolate()方法还有 linear, time, index, values, nearest, zero, slinear,
# # quadratic, cubic, barycentric, krogh, polynomial, spline,
# # piecewise_polynomial, from_derivatives, pchip, akima 等插值方法

# #独热编码,get_dummies() 将以分类形式存在的变量转换为独热编码。
# df = pd.read_csv("one_hot_demo.csv", header=0)
# onehot = pd.get_dummies(df[['status', 'color']])
# print(onehot)

# #重复值处理，pandas.DataFrame.duplicated() 可以用来标识重复数据
# pd.DataFrame.duplicated(df)
# #pandas.DataFrame.drop_duplicates() 可以返回一个去重后的数据集。


# #异常值检测，箱形图
# from matplotlib import pyplot as plt
# data = pd.read_csv("test_file.csv", header=0)
# total_population = data["Total Population"]
# plt.boxplot(total_population)
# plt.show()
# P = plt.boxplot(total_population)
# outlier = P['fliers'][0].get_ydata()#这行代码的作用是获取箱线图中的第一组（也可能是唯一一组）异常值，并将该组异常值的y轴坐标存储在outlier变量中。
# # data.boxplot()
# plt.show()

#感想：不能只停留在会使用一些工具和方法，去思考什么适合该用什么样的处理方法，深入思考和广泛实践，锻炼自己对数据的敏感性。
#加油小范！